package org.iori.luodan.dao;

import java.util.HashMap;
import java.util.List;


import com.iori.common.constant.ArchConstant;
import com.iori.common.db.DataAccessorFactory;
import com.iori.common.db.dbctrl.DataAccessor;
import com.iori.common.log.FounderLog;
import com.iori.common.log.LogFactory;

/**
 * [クラス名]<br>
 * DeviceDao.java<br>
 * [機能概要]<br>
 * 検索<br>
 * <br>
 * [変更履歴]<br>
 * 2012/11/9 ver1.00 新規作成<br>
 * 
 * @author luodan CORPORATION lun_xing
 * @version 1.00
 */
public class DeviceDao {

	//	Log出力クラスを定義
	private static FounderLog log = LogFactory.getFounderLog(DeviceDao.class);

	/**	検索デバイスの情報
	 * 
	 */
	public List getDeviceInfo() throws Exception {
		List resultList = null;
		try {
			DataAccessor da = DataAccessorFactory
					.getDataAccessor("DeviceDao.getDeviceInfo");
			resultList = da.executeQueryAsList();
		} catch (Exception e) {
			// TODO 自動生成された catch ブロック
			log.error(e);
			throw e;
		}
		return resultList;
	}
	
	/**	検索Apns All infoの情報
	 * 
	 */
	public HashMap getApnsInfo() throws Exception {
		HashMap map = null;
		try {
			DataAccessor da = DataAccessorFactory
					.getDataAccessor("DeviceDao.getApnsInfo");
			List resultList = da.executeQueryAsList();
			if (null != resultList && resultList.size() > 0) {
				map = (HashMap)resultList.get(0);
			}
		} catch (Exception e) {
			// TODO 自動生成された catch ブロック
			log.error(e);
			throw e;
		}
		return map;
	}
	
	/**	検索指定ユーザのApns infoの情報
	 * 
	 */
	public List getUserApnsInfo(int userId) throws Exception {
		List resultList = null;
		try {
			DataAccessor da = DataAccessorFactory
					.getDataAccessor("DeviceDao.getUserApnsInfo");
			da.setParameter(":USER_ID", userId);
			resultList = da.executeQueryAsList();
		} catch (Exception e) {
			// TODO 自動生成された catch ブロック
			log.error(e);
			throw e;
		}
		return resultList;
	}
	
	/**	デバイスの情報が存在するかどうか
	 * 
	 */
	public Boolean isDeviceExist(String deviceToken) throws Exception {
		Boolean resul = false;
		try {
			DataAccessor da = DataAccessorFactory
					.getDataAccessor("DeviceDao.getDeviceInfo");
			HashMap map = new HashMap();
			map.put(":DEVICE_TOKEN", deviceToken);
			da.setParameter(":CONDITION_DEVICE_TOKEN", map);
			List resultList = da.executeQueryAsList();
			if (resultList != null && resultList.size() > 0) {
				return true;
			}
		} catch (Exception e) {
			// TODO 自動生成された catch ブロック
			log.error(e);
			throw e;
		}
		return resul;
	}
	
	/**	デバイスの情報を新規
	 * 
	 */
	public Boolean insertDeviceInfo(String deviceToken) throws Exception {
		Boolean resul = false;
		try {
			DataAccessor da = DataAccessorFactory
					.getDataAccessor("DeviceDao.insertDeviceInfo");
			da.setParameter(":DEVICE_TOKEN", deviceToken);
			da.setParameter(":USER_ID", ArchConstant.DEFAULT_USER_ID);
			int result = da.executeStatement();
			if (result > 0) {
				return true;
			}
		} catch (Exception e) {
			// TODO 自動生成された catch ブロック
			log.error(e);
			throw e;
		}
		return resul;
	}
	
	/**	デバイスの情報を新規
	 * 
	 */
	public Boolean insertDeviceInfo(String deviceToken, int userId) throws Exception {
		Boolean resul = false;
		try {
			DataAccessor da = DataAccessorFactory
					.getDataAccessor("DeviceDao.insertDeviceInfo");
			da.setParameter(":DEVICE_TOKEN", deviceToken);
			da.setParameter(":USER_ID", userId);
			int result = da.executeStatement();
			if (result > 0) {
				return true;
			}
		} catch (Exception e) {
			// TODO 自動生成された catch ブロック
			log.error(e);
			throw e;
		}
		return resul;
	}
	
	/**	デバイスの情報を更新
	 * 
	 */
	public Boolean updateDeviceInfo(String deviceToken, int userId) throws Exception {
		Boolean resul = false;
		try {
			DataAccessor da = DataAccessorFactory
					.getDataAccessor("DeviceDao.updateDeviceInfo");
			da.setParameter(":DEVICE_TOKEN", deviceToken);
			da.setParameter(":USER_ID", userId);
			int result = da.executeStatement();
			if (result > 0) {
				return true;
			}
		} catch (Exception e) {
			// TODO 自動生成された catch ブロック
			log.error(e);
			throw e;
		}
		return resul;
	}
}
